// 主程序实现
package pluginmng

import (
	"fmt"
	"log"

	x "gitee.com/shexk/uninm/interfaces"
)

// 主程序实现HostInterface接口
type Host struct {
	manager *Manager
	config  map[string]any
}

// 创建新的主程序实例
func NewHost(config map[string]any) *Host {
	return &Host{
		config: config,
	}
}

// 启动主程序
func (h *Host) Start() error {
	// 获取插件目录配置
	pluginDir, ok := h.config["plugin_dir"].(string)
	if !ok || pluginDir == "" {
		pluginDir = "./plugins"
	}

	// 创建插件管理器
	h.manager = NewManager(pluginDir, h, h.config)

	// 加载插件
	log.Println("Loading plugins...")
	if err := h.manager.LoadPluginsFromDir(); err != nil {
		log.Printf("Error loading plugins: %v", err)
	}

	// 显示已加载的插件
	plugins := h.manager.GetAllPlugins()
	log.Printf("Successfully loaded %d plugins:", len(plugins))
	for _, p := range plugins {
		log.Printf("- %s v%s: %s", p.Name, p.Version, p.Description)
	}

	// 等待中断信号
	//h.waitForShutdown()

	return nil
}

func (h *Host) Close() {
	fmt.Println("Close System")
	h.manager.Close()
}

// 等待关闭信号
// func (h *Host) waitForShutdown() {
// sigChan := make(chan os.Signal, 1)
// signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
// <-sigChan

// log.Println("Shutting down...")
// h.manager.Close()
// log.Println("Shutdown complete")
// }

// 实现HostInterface接口的Log方法
func (h *Host) Log(level string, message string) {
	log.Printf("[%s] %s", level, message)
}

// 实现HostInterface接口的GetConfig方法
func (h *Host) GetConfig(key string) (any, bool) {
	value, exists := h.config[key]
	return value, exists
}

// 实现HostInterface接口的CallPlugin方法
func (h *Host) CallPlugin(pluginID string, req x.Request) (x.Response, error) {
	return h.manager.CallPlugin(pluginID, req)
}
